rekurzivna funkcia

Otázka od: Peter Surovy

8. 11. 2002 17:55

Ahoj
napisal som si funkciu ktora vracia record
a co vola samu seba cca takto:

function najdi_mensibod(x,y:word):TPos;
...
if najmensi=g then begin
                   result.x:=x;
                   result.y:=y;
                   end;
if najmensi=ghl then najdi_mensibod(x-6,y-6); //riadok1
if najmensi=ghh then najdi_mensibod(x, y-6); //riadok2
if najmensi=ghp then najdi_mensibod(x+6,y-6); //riadok3
if najmensi=gll then najdi_mensibod(x-6,y);

problem je ked napr. plati riadok cislo 2
zavola sa funkcia s novymi parametrami spravne
ale potom ked uz obsahuje result spravne vysledky
pokracuje to tu zase riadkom 3 a tam uz robi blbosti
pretoze sa pri rekurzivnom volani prepisali premenne ghl,ghh. ...

skusal som tam dat exit ale to mi jaksi nepomohlo

Skratka chcel by som nejako napisat ze ked uz vojde do tej podmienky
kde sa naplna result uz nech to vsetko skonci ale neviem ako.
PS

Odpovedá: Peter Surovy

8. 11. 2002 19:21

No odpoviem si zase sam  

----- Original Message -----
From: "Peter Surovy" <psurovy@uevora.pt>
Sent: Friday, November 08, 2002 4:39 PM

> function najdi_mensibod(x,y:word):TPos;
> ...
> if najmensi=g then begin
> result.x:=x;
> result.y:=y;
> end;
> if najmensi=ghl then najdi_mensibod(x-6,y-6); //riadok1
> if najmensi=ghh then najdi_mensibod(x, y-6); //riadok2
> if najmensi=ghp then najdi_mensibod(x+6,y-6); //riadok3
> if najmensi=gll then najdi_mensibod(x-6,y);

ked funkcia zavola samu seba a naplni sa result je to len
ciastocny result a najvyssia uroven funkcie ho nema skade vidiet
preto treba tie riadky upravit takto:

 if najmensi=ghl then RESULT:=najdi_mensibod(x-6,y-6);
....


PS